#ifndef LYRICS_INTERFACE_H
#define LYRICS_INTERFACE_H

#include <QWidget>
#include <QMediaPlayer>
#include <QTimer>
#include <QDialog>  // 对话框支持
#include <QListWidget>  // 列表控件支持

namespace Ui {
class Lyrics_interface;
}

class Lyrics_interface : public QWidget
{
    Q_OBJECT

public:
    explicit Lyrics_interface(QWidget *parent = nullptr);
    ~Lyrics_interface();

    // 1. 公开 LyricLine 结构体，允许外部识别
       struct LyricLine {
           qint64 time;      // 时间戳（毫秒）
           QString text;     // 歌词文本
       };

    void setMediaPlayer(QMediaPlayer *player);  // 设置媒体播放器
    void loadLyrics(const QString& lyrics);     // 加载歌词
    void startLyricsUpdate();  // 开始歌词更新
    void stopLyricsUpdate();   // 停止歌词更新
    void setPlaylistItems(const QStringList& playlists); // 设置歌单列表

    QList<LyricLine> getLyrics() const { return lyrics; } // 外部通过此函数获取歌词列表

signals:
    void backToMain();  // 返回主界面的信号
    void addSongToPlaylistRequested(const QString& playlistName);  // 添加歌曲到歌单请求

    void previousSongRequested();  // 上一首请求
    void nextSongRequested();      // 下一首请求

    void currentLyricChanged(const QString& lyric);

protected:
    void showEvent(QShowEvent *event) override;  // 显示事件
    void hideEvent(QHideEvent *event) override;  // 隐藏事件

private:
    Ui::Lyrics_interface *ui;               // 1. UI 指针
    QMediaPlayer *mediaPlayer;              // 2. 媒体播放器
    QTimer *lyricsTimer;                    // 3. 歌词定时器
    QTimer *progressTimer;                  // 4. 进度定时器
    int lastLyricIndex = -1;                // 5. 上次歌词索引
    bool isSliderPressed = false;           // 6. 进度条按压标记
    QList<LyricLine> lyrics;                // 7. 歌词列表（依赖 public 的 LyricLine）
    QDialog* playlistDialog = nullptr;      // 8. 歌单对话框
    QListWidget* playlistListWidget = nullptr; // 9. 歌单列表
    bool isPlaying = false;                 // 10. 播放状态
    int currentVolume = 50;                 // 11. 当前音量（最后初始化）


        void showPlaylistSelectionDialog();  // 显示歌单选择对话框
        void updatePlayPauseButton();
        void setupButtonIcons();       // 声明按钮图标设置函数
        void updateVolume();           // 声明音量更新函数
        void updateVolumeDisplay();    // 声明音量显示更新函数
        void parseLyrics(const QString& lyricsText);  // 解析歌词
        int findCurrentLyricIndex(qint64 position);   // 查找当前歌词索引
        QString formatLyricsDisplay(int currentIndex); // 格式化歌词显示
        void scrollToCurrentLyric(int currentIndex);
        QString formatTime(qint64 milliseconds);      // 格式化时间显示

private slots:
    void onBackButtonClicked();  // 返回按钮点击
    void updateLyricsDisplay();  // 更新歌词显示

    void updateProgress();       // 更新播放进度
    void onSliderMoved(int position); // 进度条拖动
    void onSliderReleased();     // 进度条释放
    void updateDuration(qint64 duration); // 更新总时长
    void updatePosition(qint64 position); // 更新当前位置

    void onAddToPlaylistClicked();  // 添加歌曲到歌单按钮点击
    void onPlaylistSelected();  // 歌单选择确认

    void onPlayPauseButtonClicked();// 暂停/继续按钮的槽函数

    void onRestartButtonClicked();     // 重新播放
    void onPreviousButtonClicked();    // 上一首
    void onNextButtonClicked();        // 下一首
    void onVolumeAddButtonClicked();   // 音量+5%
    void onVolumeSubButtonClicked();   // 音量-5%
    void onVolumeSliderMoved(int value); // 音量滑块移动
};

#endif // LYRICS_INTERFACE_H
